#!/bin/bash
#此脚本用于检测linux系统重要文件是否被改动，如果改动则用邮件报警
#建议用定时任务执行此脚本，如每5分钟执行一次，也可修改此脚本用于死循环检测
#Ver:1.0
#http://www.cnblogs.com/kevingrace

#定义验证文件所在目录
FileDir='/tmp/CheckFile'

#定义需要验证的文件目录。这里我监控的是/data/test目录
CheckDir=(
/home/xwf/Public/gitlab/planning/planner/local_planner/spline_local_planner/follow_edge_planner
)

#生成所定义需验证的文件样本日志函数
OldFile () {
for i in ${CheckDir[@]}
do
/usr/bin/find ${i} -type f |xargs md5sum >> ${FileDir}/old.log
done
}
NewFile () {
for i in ${CheckDir[@]}
do
/usr/bin/find ${i} -type f |xargs md5sum >> ${FileDir}/new.log
done
}

#生成所定义文件新日志函数
if [ ! -d ${FileDir} ]
then
mkdir ${FileDir}
fi

#假如验证文件目录不存在则创建
if [ ! -f ${FileDir}/old.log ]
then
OldFile
fi

#生成新验证日志
NewFile

#新验证日志与样本日志进行比较
/usr/bin/diff ${FileDir}/new.log ${FileDir}/old.log >${FileDir}/diff.log
Status=$?

#假如比较结果有变化，则发送邮件报警
if [ ${Status} -ne 0 ]
then
echo "File changed"
fi

#清除新旧日志，把比较结果进行备份
/bin/mv -f ${FileDir}/diff.log ${FileDir}/diff$(date +%F__%T).log
cat /dev/null > ${FileDir}/old.log
cat /dev/null > ${FileDir}/new.log

#重新生成样本日志
OldFile

#删除目录内30天以前的比较结果备份文件
/usr/bin/find ${FileDir} -type f -mtime +30 |xargs rm -f